/**
 * Created with IntelliJ IDEA
 * Description:
 * User:34398
 * Date:2024-07-01
 * Time:20:56
 */


/*
*
*进程是一组PCB
* 一个线程是一个PCB
* 一个进程的所有线程共用同一份资源
* 线程比进程轻量，主要原因是创建线程省去了 分配资源  销毁线程省去了“释放资源”
*
* 一个进程中的线程不是越多越好，有一个度，大于一定线程，效率也会下降
*
* 线程太多，大于CPU的核心数，那么就无法实现微观的“并行执行”
*
* 线程太多，还会引发“冲突”
* 既多个线程使用同一份资源，对同一个变量进行读写操作
*
* 一个进程至少包含一个线程
*
*
* 线程是系统执行调度的基本单位
* 进程是系统资源分配的基本单位
*
* 线程是当下实现并发编程的主流方式，通过多线程就可以利用好多核心CPU
*但是也不是越多越好
*
* 多线程之间可能相互影响，一个线程抛出异常，可能会带走其他线程
*
* 多个进程之间一般不会相互影响    ，一个进程崩了，不会影响其他进程（“进程的隔离性”）
*
*  */
package thread;

//创建一个类，继承Thread(不用导包，它在java.lang)
class MyTread extends Thread{

    //继承Thread不是主要目的，重写public void run()才是重点（回调函数，会自动调用）——————没有手动调用toString 、compareTo
    @Override
    public void run(){
        while(true){
            System.out.println("hello thread");

            try {
                MyTread.sleep(1000);//无法使用throws 关键字    因为我们在重写run方法，run的父类没有throws这样的异常声明
            } catch (InterruptedException e) {

                //throw new RuntimeException(e);
                e.printStackTrace();
            }
        }
    }

}
/**第三方工具查看线程状态要会
 *
 *
 * */

//在多线程中，哪一个线程线执行是不确定的 取决于操作系统，内核里的“调度器”  ————近似是“随机的”实际上有规则，只是应用程序无法干预调度器管理每一个线程的那一套规则
//“抢占式执行”
public class TestTread {

    public static void main(String[] args) throws InterruptedException {//调用main方法的线程，称为主线程
        MyTread t=new MyTread();

        //创建线程
        t.start();//start是自带的方法（这个方法会常见一个线程，执行run中的程序）


        /*t.run()只会打印一次hello thread*/

        //可以直接调用run去执行程序，但是它就不会创建线程了，他会在主线程中进程运行

        while(true){
            System.out.println("主线程");
            Thread.sleep(1000);
        }


    }
}
